from datetime import datetime

from django import template


def my_capfirst(value):
    return value.capitalize()


register = template.Library()
# 第一个是调用时使用的方法名，可以谁便改
# 第二个是定义的函数名
register.filter('my_capfirst', my_capfirst)


# 第二种方法
# 定义调用时使用的方法名就可以了
@register.filter('my_default')
def my_default(value, arg):
    # 三目运算 判断传进来的值是否为空，如果为空则返回自定义的内容，有值则返回原有值
    return value if value else arg


# 自定义模版标签
# 如果没有自定义调用时的名字，会将你的函数名默认为调用时使用的名字
@register.simple_tag
def current_time(format_string):
    # 格式化的操作
    # strftime=stringformattime
    return datetime.now().strftime(format_string)


@register.filter("time_since")
def time_since(value):
    """
    过滤器：对文章发布信息进行处理
    1、如果和当前的时间间隔小于1分钟 显示 刚刚
    2、如果大于1分钟小于1小时 显示 xx分钟前
    3、如果大于1小时小于1天   显示xx小时前
    4、如果大于1天小于30天   显示xx天前
    5、如果大于30天显示具体的发布时间
    :param value:发布时间
    :return:显示信息
    """
    now = datetime.now()
    # 计算时间间隔 把当前时间减去传进来的文章创建时间
    # 时间差单位 秒
    timestamp = (now - value).total_seconds()
    if timestamp < 60:
        return "刚刚"
    elif 60 < timestamp < 60 * 60:
        # 计算多少分钟
        res = int(timestamp / 60)
        return f'{res}分钟前'
    elif 60 * 60 < timestamp < 60 * 60 * 24:
        res = int(timestamp / (60 * 60))
        return f'{res}小时前'
    elif 60 * 60 * 24 < timestamp < 60 * 60 * 24 * 30:
        res = int(timestamp / (60 * 60 * 24))
        return f'{res}天前'
    else:
        return value.strftime('%Y-%m-%d %H:%M:%S')
